package com.demo.java.OD251_300.OD266;

import java.util.*;

/**
 * @author bug菌
 * @Source 公众号：猿圈奇妙屋
 * @des： 【微服务的集成测试】问题
 * @url： https://blog.csdn.net/weixin_43970743/article/details/130466741
 */
public class OdMain {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        // 读取用户输入的整数 n
        int n = sc.nextInt();
        // 定义一个 n x n 的二维整数数组 nums
        int[][] nums = new int[n][n];

        // 使用双重循环为二维数组 nums 的每个元素赋值
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {
                // 读取用户输入的整数并赋值给 nums[i][j]
                nums[i][j] = sc.nextInt();
            }
        }

        // 读取用户输入的整数 k
        int k = sc.nextInt();
        // 调用 dfs 函数，传入二维数组 nums 和整数 k-1，将返回值赋给 count
        int count = dfs(nums, k - 1);

        System.out.println(count);
    }

    private static int dfs(int[][] nums, int k) {
        int max = 0;

        // 使用循环遍历 nums 数组的第 k 行
        for (int i = 0; i < nums.length; i++) {
            // 如果 nums[k][i] 不等于 0 且 i 不等于 k，则执行以下操作
            if (nums[k][i] != 0 && i != k) {
                // 调用 dfs 函数，传入二维数组 nums 和整数 i，将返回值与 max 取较大值并赋给 max
                max = Math.max(max, dfs(nums, i));
            }
        }
        return max + nums[k][k];
    }
}